cas(Central Authentication Service)即集中式认证服务,是一种针对互联网的单点登录协议。
它的目的是允许一个用户访问多个应用程序,而只需提供一次凭证(如用户名和密码)。它还允许web应用程序在没有获得用户的安全凭据(如密码)的情况下对用户进行身份验证,从总体架构上来看CAS包含服务端和客户端两个独立的组件,他们之间通过各种协议进行通信。

CAS 服务端
CAS服务端是基于Spring构建、主要提供用户认证和授予访问权限等功能。当用户认证成功后CAS服务端将向访问的发放“准予票据”(全称ticket-granting ticket,简称:TGT)”,并创建一个全局的单点登录会话(SSO session)。当用户在浏览器端使用“准予票据(TGT)”作为令牌来重定向访问一个应用时,服务端在将客户端附带的TGT验证通过后,向客户端发放一个“服务票据(ST)”然后作为参数附在被访问的应用URL后面。被访问应用通过后台的方式将接收到的ST发送到CAS服务端进行验证,关于交互细节请阅读本系列博文第二章《cas(Central Authentication Service)详细教程(2) - 认证流程详解》
CAS 客户端
CAS客户端通常有两种不同的含义:
- 含义一:指启用了CAS相关功能并可以通过某种指定的协议同CAS服务进行通信的应用
- 含义二:指作为一个可以和各类开发语言或成熟应用进行集成的代码库以实现通过某种协议(例如:CAS,SAML,OAuth)同CAS服务端进行通信
CAS客户端支持大部分开发语言及应用,cas支持的开发语言:
- Apache httpd Server
- JAVA(Java CAS Client)
- .NET(.NET CAS Client)
- PHP(phpCAS)
- Perl(PerlCAS)
- Python(pycas)
- Ruby(rubycas-client)
cas支持的应用:
- Outlook Web Application (ClearPass + .NET CAS Client)
- Atlassian Confluence
- Atlassian JIRA
- Drupal
- Liferay
- uPortal
通信协议
客户端可以使用服务端所支持的任意一种协议同CAS服务端进行通信,这些协议在概念上基本类似,但是部分协议拥有一些特点或特征已实现到特定的场景或用户需求,例如:CAS协议支持委托(代理)认证,SAML协议支持属性发放和单点登出,CAS支持的协议:
- CAS (versions 1、2、最新版本为3)
- SAML 1.1
- OpenID
- OAuth (1.0, 2.0)
组成模块
CAS服务由三层子模块组成:
- WEB服务模块(Srping MVC/SpringWebflow)
- 票据管理模块(Ticketing)
- 认证管理模块(authentication)
有关CAS的构建以及自定义组件配置都涉及到这三个模块,WEB服务模块是所有外部系统包括CAS客户端与CAS服务进行通信的endpoint,WEB服务模块委托票据管理模块生成CAS客户端访问相关票据,当客户端认证成功后,CAS服务端便向客户端发放准予票据(TGT)存在浏览器cookie中并在服务端生成单点登录会话,因此票据管理模块将频繁委托认证模块进行相关认证流程。